﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Sistema.Dominio;
using System.Security.Cryptography.X509Certificates;

namespace Sistema.NFe
{
    public class CancelarNFe : NFe
    {
        public void Cancelar(NFeInfo Nota, String Justificativa, X509Certificate2 CertificadoDigital)
        {
            Nota = base._repository.Buscar(Nota.ID);

            if (Nota == null) { return; }
            if (Nota.StatusNota != enumStatusNota.Liberada) { return; }

            if (Justificativa.Length < 15) { return; }

            NFeDadosEnvioVO dadosLiberacao = (from DadosEnvio in Nota.DadosEnvio
                                              where DadosEnvio.Status == "100"
                                              select DadosEnvio).First();
            String protocoloLiberacao = (from DadosOcorrencia in Nota.DadosOcorrencias
                                         where DadosOcorrencia.TipoOcorrencia == TipoOcorrencia.Liberacao
                                         select DadosOcorrencia.Protocolo).FirstOrDefault();

            WebServiceNFe.CancelamentoNFe cancelar = new WebServiceNFe.CancelamentoNFe();
            var retornoCancelamento = cancelar.Cancelar(dadosLiberacao.ChaveNFe, protocoloLiberacao, Justificativa, CertificadoDigital);
            if (retornoCancelamento.Item1 == true)
            {
                Nota.DadosEnvio.LastOrDefault().Status = "101";
                Nota.DadosEnvio.LastOrDefault().DescricaoStatus = "Cancelamento de NF-e homologado";
                
                Nota.DadosOcorrencias.Add(retornoCancelamento.Item2);
                Nota.StatusNota = enumStatusNota.Cancelada;
                base._repository.Alterar(Nota);
            }
        }

        public void Cancelar(IList<NFeInfo> notas, String Justificativa, X509Certificate2 CertificadoDigital)
        {
            foreach (var a in notas)
            {
                this.Cancelar(a, Justificativa, CertificadoDigital);
            }
        }
    }
}
